// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); 1xBet зеркало и официальный сайт 1хБет вход на сегодня – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

1xBet зеркало и официальный сайт 1хБет вход на сегодня

1xbet официальный сайт – ваш ключ к увлекательным ставкам и играм! Не можете попасть на 1хбет официальный сайт? Используйте 1хбет зеркало и продолжайте наслаждаться всеми возможностями платформы. Удобно и быстро – зеркало 1хбет всегда доступно!

Хотите 1хбет скачать или скачать 1xbet? Мы поможем вам с легкостью установить приложение и играть где угодно. 1xbet зеркало и 1 xbet – ваши надежные помощники в мире азарта!

1xBet зеркало: доступ к сайту в любое время

Скачать 1xbet или использовать 1хбет зеркало – выбор за вами. Оба варианта обеспечивают стабильный доступ к функционалу и играм. Зеркало 1хбет позволяет вам не пропустить ни одного важного события, будь то ставки на спорт или казино.

Преимущества зеркала 1xbet
Как использовать

Постоянный доступ к 1xbet официальный сайт Просто введите адрес зеркала 1хбет Безопасность и надежность Скачать 1xbet или использовать зеркало Полная функциональность платформы 1 xbet зеркало работает без ограничений

Независимо от того, предпочитаете ли вы 1хбет скачать или пользоваться зеркалом 1xbet, вы всегда будете на шаг впереди. Зеркало 1хбет – это гарантия стабильного доступа к вашему любимому сайту в любое время суток.

Почему стоит выбрать официальный сайт 1хБет?

1xbet официальный сайт гарантирует безопасность и надежность всех транзакций. Здесь вы получаете доступ к лучшим азартным играм и спортивным ставкам, которые регулярно обновляются и улучшаются.

Скачать 1xbet можно прямо с официального сайта, что обеспечивает быстрый и удобный доступ к платформе. 1хбет скачать – это простой способ начать игру в любое время.

Если возникают проблемы с доступом, используйте 1xbet зеркало, которое всегда актуально и предоставляет доступ к 1хбет официальный сайт. Зеркало 1хбет работает стабильно, обеспечивая непрерывный доступ к любимым играм и ставкам.

1хбет зеркало также позволяет скачать 1xbet, если основной сайт временно недоступен. Это гарантирует, что вы никогда не потеряете возможность играть и зарабатывать.

Выбирая 1хбет официальный сайт, вы получаете доступ к уникальным бонусам, акциям и высоким коэффициентам. 1 xbet – это не только качественные игры, но и надежное партнерство с лидером в мире азартных развлечений.

Как использовать зеркало 1xBet для входа?

Чтобы использовать зеркало 1xbet, следуйте этим простым шагам:

1. Найдите актуальное зеркало 1хбет на надежном источнике. Убедитесь, что оно соответствует 1хбет официальный сайт.

2. Перейдите по ссылке зеркала. Вас перенаправит на страницу, идентичную 1xbet.

3. Введите свои данные для входа в аккаунт. Если у вас еще нет аккаунта, вы можете зарегистрироваться через зеркало.

4. После успешного входа вы сможете скачать 1xbet или продолжить игру через браузер.

Использование зеркала 1хбет – это быстрый и надежный способ получить доступ к 1xbet в любое время. Не забудьте сохранить ссылку на зеркало, чтобы избежать потери доступа.

Преимущества игры на официальном сайте 1хБет

Игра на 1xbet официальный сайт предлагает множество уникальных преимуществ, которые делают его лучшим выбором для любителей азартных игр.

  • Доступ к 1xbet зеркало позволяет всегда оставаться на связи, даже при блокировке основного сайта.
  • Быстрый и удобный 1хбет вход без необходимости регистрации каждый раз.
  • Возможность 1xbet скачать приложение для максимального комфорта и быстрого доступа.
  • Широкий выбор игр и событий, включая ставки на спорт, казино и другие развлечения.
  • Надежность и безопасность, обеспечиваемая лицензированной платформой.

Если вы ищете альтернативный способ доступа, используйте зеркало 1хбет, которое всегда актуально и доступно.

  • Простота использования и интуитивно понятный интерфейс.
  • Регулярные акции и бонусы для игроков.
  • Поддержка 24/7 для решения любых вопросов.
  • Не упустите возможность попробовать свои силы на 1xbet официальный сайт или через зеркало 1xbet. Скачайте 1хбет скачать и наслаждайтесь игрой в любое время!

    Безопасность и надежность 1xBet зеркала

    1xBet зеркало обеспечивает пользователям надежный и безопасный доступ к 1хбет официальному сайту. Благодаря постоянному обновлению зеркала 1xbet, игроки могут быть уверены в стабильной работе платформы и защите своих данных.

    Для тех, кто предпочитает мобильные устройства, доступно 1хбет скачать приложение, которое также гарантирует высокий уровень безопасности. Зеркало 1хбет позволяет обойти блокировки и продолжить игру без перерывов.

    1xbet зеркало и 1хбет зеркало – это не только удобный инструмент для доступа, но и гарантия защиты от киберугроз. Скачать 1xbet или использовать 1xbet официальный сайт через зеркало – выбор каждого, но безопасность остается на высоком уровне.

    Независимо от того, используете ли вы 1хбет официальный сайт или зеркало 1xbet, вы можете быть уверены в надежности и защите ваших данных. 1xbet зеркало – это ваш ключ к безопасной игре в любое время.

    Регулярное обновление зеркал для удобства пользователей

    Мы заботимся о комфорте наших пользователей, поэтому регулярно обновляем зеркало 1xbet и 1хбет зеркало, чтобы вы всегда могли беспрепятственно получить доступ к 1xbet официальному сайту. Независимо от вашего местоположения, наша команда гарантирует стабильный вход на 1хбет через актуальные зеркала.

    Если вы ищете 1хбет скачать или хотите воспользоваться 1xbet зеркалом, наши обновления помогут вам оставаться на связи с любимым сайтом. Мы также предлагаем удобные ссылки для быстрого доступа к 1хбет официальному сайту и 1 xbet.

    Не упустите возможность воспользоваться нашими услугами – зеркало 1хбет и 1xbet зеркало всегда актуальны и доступны для вас. Следите за обновлениями и получайте максимум удовольствия от использования 1xbet!

    1хБет вход на сегодня: актуальные ссылки

    Для удобства пользователей мы предлагаем актуальные ссылки для входа на 1xbet. Благодаря этому вы сможете быстро получить доступ к 1хбет официальный сайт и продолжить наслаждаться всеми преимуществами платформы.

    • Используйте 1хбет зеркало для стабильного доступа к сайту.
    • Скачайте 1xbet скачать приложение для удобства на мобильных устройствах.
    • Обратите внимание на зеркало 1xbet, которое обновляется регулярно.

    Если у вас возникли трудности с доступом, воспользуйтесь нашими рекомендациями:

  • Перейдите по ссылке на 1xbet официальный сайт.
  • Используйте зеркало 1хбет для обхода блокировок.
  • Скачайте скачать 1xbet для удобного доступа в любое время.
  • Не забывайте, что 1хбет зеркало и 1xbet официальный сайт помогут вам всегда оставаться на связи с любимой платформой. Удачного временипрепровождения!

    Design and Develop by Ovatheme